package com.zerocarbon.framework.db.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.zerocarbon.framework.common.model.BaseEntity;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.beans.factory.annotation.Value;

import java.util.Date;

/**
 * 自定义公共填充处理器
 * @author wyf
 * @date 2020年3月5日
 */
@Slf4j
@SuppressWarnings("rawtypes")
public class DateMetaObjectHandler implements MetaObjectHandler {
	
    @Value("${zerocarbon.constant.defaultRegion:}")
    private String defaultRegion;

    /**
     */
    public DateMetaObjectHandler() {	//long workerId, long dataCenterId
        super();
       // this.workerId = workerId;
       // this.dataCenterId = dataCenterId;
       //log.info("---------------------------15 DateMetaObjectHandler init----------------------------------------");
    }
   
    /**
     * 插入填充，字段为空自动填充
     * 注意：不支持 复合主键 自动注入！！
     * <p>
     * 所有的继承了BaseEntity、SuperEntity的实体，在insert时，
     * id： id为空时， 通过IdGenerate生成唯一ID， 不为空则使用传递进来的id
     * createUser, updateUser: 自动赋予 当前线程上的登录人id
     * createTime, updateTime: 自动赋予 服务器的当前时间
     * <p>
     * 未继承任何父类的实体，且主键标注了 @TableId(value = "xxx", type = IdType.INPUT) 自动注入 主键
     * 主键的字段名称任意
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        Date date = new Date();
        this.setFieldValByName(BaseEntity.CREATE_TIME, date, metaObject);
        this.setFieldValByName(BaseEntity.UPDATE_TIME, date, metaObject);
//        this.setFieldValByName(BaseEntity.REGION, defaultRegion, metaObject);
        
    }

    /**
     * 更新填充
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) { //mybatis-plus版本2.0.9+
        Date date = new Date();
        this.setFieldValByName(BaseEntity.UPDATE_TIME, date, metaObject);
    }
}